package view;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.net.URL;
import java.text.ParseException;

import javax.swing.JFrame;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import controller.Controladora;
import database.ConectorDB;
import de.javasoft.plaf.synthetica.SyntheticaBlackEyeLookAndFeel;


@SuppressWarnings("serial")

public class ViewSession extends JFrame {
	
	private FinestraMenu menu;
	private ImagePanel jpMenu;
	private TabbedPane jtWindows;
	private Controladora controller; 
	private JBMenu jmbRanz;
	private String usuari;
	private ConectorDB conn;
	
	
	public ViewSession(){
		conn = new ConectorDB("ranzmanager", "arquitectosmelenudos", "ranz_project", 3306);
		menu = new FinestraMenu(this, conn);
		menu.setLocationRelativeTo(null);
		menu.setResizable(false);
		menu.setVisible(true);
		controller = new Controladora(this, conn);
		jmbRanz = new JBMenu(this,menu,controller);
		final URL urlFons = this.getClass().getResource("/view/imagenes/fons.png");
		jpMenu = new ImagePanel(urlFons);
		jpMenu.setLayout(new FlowLayout());
		
		jtWindows = new TabbedPane(controller);
		
		this.add(jpMenu);
		this.add(jtWindows);
		this.setJMenuBar(jmbRanz);
	
		
		setSize(1024,768);
		setMinimumSize( new Dimension(1024,768));
		setTitle("View Session");
		this.setLocationRelativeTo(null);

	}
	
	/**
	 * Main del programa
	 * @param args
	 */
	public static void main (String[] args){
		UIManager.put("Synthetica.text.antialias", Boolean.FALSE);
		try {
         UIManager.setLookAndFeel(new SyntheticaBlackEyeLookAndFeel());
	    } 
	    catch (UnsupportedLookAndFeelException e) {
	       
	    } catch (ParseException e) {
			e.printStackTrace();
		}
		
		ViewSession finestra = new ViewSession();
		finestra.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
	
	/**
	 * Busca l'archiu
	 * @param file
	 * @return true si l'ha trobat, false si no.
	 */
	public boolean searchFile(String file) {
		if (controller.searchFile(file)) {
			jtWindows.resetCircuit();
			return true;
		}
		
		return false;
	}
	
	/**
	 * Reseteja les dades.
	 */
	public void resetApp() {
		jtWindows.resetCircuit();
		controller.resetDades();
	}
	
	/**
	 * Mostra la pesta��a que vulguis
	 * @param index de la pesta��a
	 */
	public void showTab(int index) {
		jtWindows.getTabbedPane().setSelectedIndex(index);
	}

	/**
	 * 
	 * @return usuari
	 */
	public String getUsuari() {
		return usuari;
	}

	/**
	 * 
	 * @param usuari
	 */
	public void setUsuari(String usuari) {
		this.usuari = usuari;
	}
	
	/**
	 * Comprova que l'usuari existeixi a la bbdd.
	 * @param usuario
	 * @param password
	 * @return true si existeix, false si no
	 */
	public boolean checkUser(String usuario, String password) {
		if (!controller.checkUser(usuario)) {
			return controller.registerUser(usuario, password);
		}
		
		return false;
	}
	
	/**
	 * Comprova si l'usuari ha inserit be la contrasenya
	 * @param usuario
	 * @param password
	 * @return true si es correcte, false si no.
	 */
	public boolean login(String usuario, String password) {
		if (controller.login(usuario, password)){
			setUsuari(usuario);
			showTab(0);
			setVisible(true);
			menu.setVisible(false);
			return true;
		}
		return false;
	}
	
	/**
	 * Activa la opcio de carregar a la bbdd
	 */
	public void enableUploadDB() {
		jmbRanz.enableUploadDB();
	}

	/**
	 * Inicialitza el plot circuit.
	 */
	public void initPlotCircuit() {
		jtWindows.initPlotCircuit();
	}
}
